package org.dev.`as`.project.main.detail

import android.graphics.Color
import androidx.core.graphics.ColorUtils
import androidx.recyclerview.widget.RecyclerView
import org.dev.hi.library.util.ColorUtil
import org.dev.hi.library.util.HiDisPlayUtils
import kotlin.math.abs
import kotlin.math.min

/**
 * Author WenPing
 * CreateTime 2021/6/24.
 * Description:自定义个recyclerview的滚动监听派生类
 * 用来把当前第一个子view的top绝对值和给定值比较；让标题栏按照比例值来设置背景颜色；
 * 从透明->白色背景
 */
class TitleScrollerListener(val threHoldeDp: Float = 100f, val callback: (Int) -> Unit) :
    RecyclerView.OnScrollListener() {

    //最后的 比例值
    private var lastFraction = 0f

    // 被用来和top值比较的给定值
    private val threHolderPx = HiDisPlayUtils.dp2px(threHoldeDp)

    /**
     * recyclerview上下滑动过程，根据根据第一个子view的top坐标和给定的高度值的比例，计算一个颜色值
     * 传给外面使用
     * top的变化是 从0变成赋值，但是绝对值增加；
     * abs[top/threHoldePx]的值是变大的
     */
    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
        super.onScrolled(recyclerView, dx, dy)

        // Return the ViewHolder for the item in the given position of the data set
        // 如果第一个holder不可见是不会获取到的！
        val firstVholder = recyclerView.findViewHolderForAdapterPosition(0) ?: return
        val top = abs(firstVholder.itemView.top).toFloat()

        var fraction = top / threHoldeDp

        if (lastFraction > 1) {
            lastFraction = fraction;
            return
        }

        val newColor = ColorUtil.getCurrentColor(
            Color.TRANSPARENT,
            Color.WHITE,
            min(fraction, 1f)
        )

        callback(newColor)
        lastFraction = fraction
    }

}